Chromium 提供判断低端机方法 发表于 2017-01-11 | 分类于 Chromium | 1234567public static boolean isLowEndDevice() { if(sLowEndDevice == null) { sLowEndDevice = Boolean.valueOf(detectLowEndDevice()); } return sLowEndDevice.booleanValue(); } 实现:123456789101112private static boolean detectLowEndDevice() { assert CommandLine.isInitialized(); if(CommandLine.getInstance().hasSwitch("enable-low-end-device-mode")) { return true; } else if(CommandLine.getInstance().hasSwitch("disable-low-end-device-mode")) { return false; } else { int ramSizeKB = amountOfPhysicalMemoryKB(); return ramSizeKB > 0 && ramSizeKB / 1024 < 512; } } 读取 /proc/meminfo 目录正则匹配出物理内存地址,具体代码如下:1234567891011121314151617181920212223242526272829303132333435363738394041424344private static int amountOfPhysicalMemoryKB() { Pattern pattern = Pattern.compile("^MemTotal:\\s+([0-9]+) kB$"); ThreadPolicy oldPolicy = StrictMode.allowThreadDiskReads(); try { FileReader e = new FileReader("/proc/meminfo"); try { BufferedReader reader = new BufferedReader(e); try { while(true) { String line = reader.readLine(); if(line == null) { Log.w("SysUtils", "/proc/meminfo lacks a MemTotal entry?"); break; } Matcher m = pattern.matcher(line); if(m.find()) { int totalMemoryKB = Integer.parseInt(m.group(1)); if(totalMemoryKB > 1024) { int var7 = totalMemoryKB; return var7; } Log.w("SysUtils", "Invalid /proc/meminfo total size in kB: " + m.group(1)); break; } } } finally { reader.close(); } } finally { e.close(); } } catch (Exception var25) { Log.w("SysUtils", "Cannot get total physical size from /proc/meminfo", var25); } finally { StrictMode.setThreadPolicy(oldPolicy); } return 0; }